package com.niit.base

object Base_04 {

//  def main(args: Array[String]): Unit = {
//    //1.方法的调用
//    //1.1 后缀调用法  对象名.方法名(参数)
//      //求 -1的绝对值
//      var i = Math.abs(-1);
//      println(i)
//
//    //1.2中缀调用法  对象名 方法名 参数
//    //在 Scala 中所有的操作符都是方法，操作符是一个方法名是符号的方法。 + - * / %
//    var v = 1 to 10
//    var abs = Math abs -1
//    var s = 1 + 1
//    //1.3花括号调用法  方法只有一个参数时才能使用花括号调用法。
//    i = Math.abs{
//      println("绝对值：")
//      -1
//    }
//    println(i)
//
//    //1.4无括号调用法 如果方法没有参数，可以省略方法后面的括号。
//    sayHello
//    //2.函数  val/var 函数变量名 = (参数名1:参数类型1, 参数名2:参数类型2...) => 函数体
//    /*
//    函数是一个对象
//    类似于方法，函数也有参数列表和返回值
//    函数定义不需要使用 def 定义
//    无需指定返回值类型
//     */
//    //定义两个整数的和的函数
//    var sum = (a:Int,b:Int) => a+b
//
//    val res = sum(10,20)
//    println(res)
//
//    /*
//    方法和函数的区别：
//    方法属于类或者对象，在运行时会加载到 JVM 的方法区。
//    可以将函数对象赋值给一个变量，在运行时会加载到 JVM 的堆内存中。
//    函数是一个对象，继承自 FunctionN，函数对象有apply、curried、toString、tupled这些方法，方法则没有。
//    结论：在 Scala 中，函数是对象，而方法是属于对象的，可以理解为：方法归属于函数。
//    函数必须要有返回值
//     函数大 > 方法小
//     */
//    //3.方法转换为函数  val/var 变量名 = 方法名 _    使用 _即可将方法转换为函数
//    val a = add _
//    var aaa = a(1,2)
//    println(aaa)
//
//
//  }

  def add(a:Int,b:Int)={
    a+b
  }


  def sayHello()={
    println("贵阳路菜市场，盖伦台球厅，冲300免费玩一个月")
  }

  //1.创建一个Person类
  class Person//空Person类



  def main(args: Array[String]): Unit = {
    //实例化对象  p为对象名
    val p = new Person();
    //println(p)

//    如果类是空的，没有任何成员，可以省略{}
//    如果构造器参数为空，可以省略()
    val pp = new Person

    var stu = new Student;
    stu.setName("李四")
    stu.age = 18
    println(s"小伙叫${stu.getName()},今年${stu.age}岁")
    stu.printInfo()
    //私有方法只能在本类中进行访问
    //stu.printMsg("你好啊")
  }

  //5.定义和访问成员变量
  class Student{
//    var name = ""
//    var age = 0
    //优雅定义成员变量  _作为初始变量值的占位符  必须使用var 必须要指定变量类型
    private var name:String = _
    var age:Int = _

    def getName(): String ={
      name
    }
    def setName(name:String): Unit ={
      this.name = name
    }

    //成员方法 this:这个  this.name  = Student.name
    def printInfo(): Unit ={
      println(this.name,age)
      //私有方法只能在本类中进行访问
      printMsg("Hello")
    }
    //私有方法只能在本类中进行访问
    private def printMsg(msg:String): Unit ={
      println(msg)
    }

  }

}
